home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-08-14 | 9.5 KB | 244 lines | [TEXT/MPS ] |
- // File Cameras.c
- #include <OSUtils.h>
-
- #include "SkinnyMain.h" // for menu item symbols
- #include "Cameras.h"
- /*
- contains:
-
- TQ3CameraObject MakeCamera(long select);
- VccPtr CameraDataToVCC(TQ3CameraObject camera);
- void VCCtoCameraData(VccPtr vcc, TQ3CameraObject camera);
-
- */
-
- extern Rect gContrlRect;
-
- static void BasicCameraDataToVCC(TQ3CameraData cameraData, VccPtr vcc);
- static void VCCtoBasicCameraData(VccPtr vcc, TQ3CameraData *cameraData);
-
-
- //----------------------------------------------------------------------------------
- TQ3CameraObject MakeCamera(long select)
- {
- TQ3CameraObject camera;
- TQ3CameraData cameraData;
- TQ3OrthographicCameraData orthographCameraData;
- TQ3ViewPlaneCameraData viewPlaneCameraData;
- TQ3ViewAngleAspectCameraData viewAngleCameraData;
- TQ3Point3D cameraFrom = { 0.0, 0.0, 15.0 };
- TQ3Point3D cameraTo = { 0.0, 0.0, 0.0 };
- TQ3Vector3D cameraUp = { 0.0, 1.0, 0.0 };
-
- cameraData.placement.cameraLocation = cameraFrom;
- cameraData.placement.pointOfInterest = cameraTo;
- cameraData.placement.upVector = cameraUp;
- cameraData.range.hither = .25;
- cameraData.range.yon = 25.0;
- cameraData.viewPort.origin.x = -1.0;
- cameraData.viewPort.origin.y = 1.0;
- cameraData.viewPort.width = 3.0;
- cameraData.viewPort.height = 2.0;
- switch (select) {
- case iOrthoGraphic:
- orthographCameraData.cameraData = cameraData;
- orthographCameraData.left = -12.0;
- orthographCameraData.top = -12.0;
- orthographCameraData.right = 12.0;
- orthographCameraData.bottom = 12.0;
- camera = Q3OrthographicCamera_New(&orthographCameraData);
- break;
-
- case iViewPlane:
- viewPlaneCameraData.cameraData = cameraData;
- viewPlaneCameraData.viewPlane = 20.0 ;
- viewPlaneCameraData.halfWidthAtViewPlane = 20.0;
- viewPlaneCameraData.halfHeightAtViewPlane = 20.0;
- viewPlaneCameraData.centerXOnViewPlane = 0.0;
- viewPlaneCameraData.centerYOnViewPlane = 0.0;
- camera = Q3ViewPlaneCamera_New(&viewPlaneCameraData);
- break;
-
- case iAspectRatio:
- viewAngleCameraData.cameraData = cameraData;
- viewAngleCameraData.fov = 90.0;
- viewAngleCameraData.aspectRatioXToY = 1.0;
- camera = Q3ViewAngleAspectCamera_New(&viewAngleCameraData);
- break;
- }
- return ( camera );
- }
-
-
- //----------------------------------------------------------------------------------
- #define cBasicData 20
-
- VccPtr CameraDataToVCC(TQ3CameraObject camera)
- {
- TQ3OrthographicCameraData orthographCameraData;
- TQ3ViewPlaneCameraData viewPlaneCameraData;
- TQ3ViewAngleAspectCameraData viewAngleCameraData;
- TQ3ObjectType type;
- TQ3Status status;
- VccPtr vcc;
-
- type = Q3Camera_GetType( camera );
- switch (type) {
- case kQ3CameraTypeOrthographic:
- status = Q3OrthographicCamera_GetData(camera, &orthographCameraData);
- if (status == kQ3Failure) return nil;
- vcc = NewVCluster((long)kQ3CameraTypeOrthographic,
- "\pOrthographicCamera", cBasicData + 4, &gContrlRect);
- if (vcc == nil) {
- SysBeep(10); // ErrMsg("\pNewVCluster failed");
- return nil;
- }
- BasicCameraDataToVCC(orthographCameraData.cameraData, vcc);
- AddValueCtl(vcc, "\pleft", orthographCameraData.left, -20.0, 0.0, 2.0);
- AddValueCtl(vcc, "\ptop", orthographCameraData.top, -20.0, 0.0, 2.0);
- AddValueCtl(vcc, "\pright", orthographCameraData.right, 0.0, 20.0, 2.0);
- AddValueCtl(vcc, "\pbottom", orthographCameraData.bottom, 0.0, 20.0, 2.0);
- break;
-
- case kQ3CameraTypeViewPlane:
- status = Q3ViewPlaneCamera_GetData(camera, &viewPlaneCameraData);
- if (status == kQ3Failure) return nil;
- vcc = NewVCluster((long)kQ3CameraTypeViewPlane,
- "\pViewPlaneCamera", cBasicData + 5, &gContrlRect);
- if (vcc == nil) {
- SysBeep(10); // ErrMsg("\pNewVCluster failed");
- return nil;
- }
- BasicCameraDataToVCC(viewPlaneCameraData.cameraData, vcc);
-
- AddValueCtl(vcc, "\pviewPlane", viewPlaneCameraData.viewPlane, 5.0, 100.0, 5.0);
- AddValueCtl(vcc, "\phalfWidthAtViewPlane", viewPlaneCameraData.halfWidthAtViewPlane, 1.0, 39.0, 2.0);
- AddValueCtl(vcc, "\phalfHeightAtViewPlane", viewPlaneCameraData.halfHeightAtViewPlane, 1.0, 39.0, 2.0);
- AddValueCtl(vcc, "\pcenterXOnViewPlane", viewPlaneCameraData.centerXOnViewPlane, -5.0, 5.0, 1.0);
- AddValueCtl(vcc, "\pcenterYOnViewPlane", viewPlaneCameraData.centerYOnViewPlane, -5.0, 5.0, 1.0);
- break;
-
- case kQ3CameraTypeViewAngleAspect:
- status = Q3ViewAngleAspectCamera_GetData(camera, &viewAngleCameraData);
- if (status == kQ3Failure) return nil;
- vcc = NewVCluster((long)kQ3CameraTypeViewAngleAspect,
- "\pViewAngleCamera", cBasicData + 2, &gContrlRect);
- if (vcc == nil) {
- SysBeep(10); // ErrMsg("\pNewVCluster failed");
- return nil;
- }
- BasicCameraDataToVCC(viewAngleCameraData.cameraData, vcc);
-
- AddValueCtl(vcc, "\pviewAngleData.fov", viewAngleCameraData.fov, 0.0, 3.0, 0.1);
- AddValueCtl(vcc, "\paspectRatioXToY", viewAngleCameraData.aspectRatioXToY, 0.4, 2.5, 0.1);
- break;
- }
- return vcc;
- }
-
-
- //----------------------------------------------------------------------------------
- void VCCtoCameraData(VccPtr vcc, TQ3CameraObject camera)
- {
- TQ3OrthographicCameraData orthographCameraData;
- TQ3ViewPlaneCameraData viewPlaneCameraData;
- TQ3ViewAngleAspectCameraData viewAngleCameraData;
- TQ3ObjectType type;
- TQ3Status status;
-
- type = Q3Camera_GetType( camera );
- switch (type) {
- case kQ3CameraTypeOrthographic:
- status = Q3OrthographicCamera_GetData(camera, &orthographCameraData);
- if (status == kQ3Failure)
- return;
- VCCtoBasicCameraData(vcc, &orthographCameraData.cameraData);
- orthographCameraData.left = GetCurrentValue(vcc, 20);
- orthographCameraData.top = GetCurrentValue(vcc, 21);
- orthographCameraData.right = GetCurrentValue(vcc, 22);
- orthographCameraData.bottom = GetCurrentValue(vcc, 23);
- status = Q3OrthographicCamera_SetData(camera, &orthographCameraData);
- break;
- case kQ3CameraTypeViewPlane:
- status = Q3ViewPlaneCamera_GetData(camera, &viewPlaneCameraData);
- if (status == kQ3Failure)
- return;
- VCCtoBasicCameraData(vcc, &viewPlaneCameraData.cameraData);
- viewPlaneCameraData.viewPlane = GetCurrentValue(vcc, 20);
- viewPlaneCameraData.halfWidthAtViewPlane = GetCurrentValue(vcc, 21);
- viewPlaneCameraData.halfHeightAtViewPlane = GetCurrentValue(vcc, 22);
- viewPlaneCameraData.centerXOnViewPlane = GetCurrentValue(vcc, 23);
- viewPlaneCameraData.centerYOnViewPlane = GetCurrentValue(vcc, 24);
- status = Q3ViewPlaneCamera_SetData(camera, &viewPlaneCameraData);
- break;
- case kQ3CameraTypeViewAngleAspect:
- status = Q3ViewAngleAspectCamera_GetData(camera, &viewAngleCameraData);
- if (status == kQ3Failure)
- return;
- VCCtoBasicCameraData(vcc, &viewAngleCameraData.cameraData);
- viewAngleCameraData.fov = GetCurrentValue(vcc, 20);
- viewAngleCameraData.aspectRatioXToY = GetCurrentValue(vcc, 21);
- status = Q3ViewAngleAspectCamera_SetData(camera, &viewAngleCameraData);
- break;
- }
- }
-
-
-
- //----------------------------------------------------------------------------------
- static void BasicCameraDataToVCC(TQ3CameraData cameraData, VccPtr vcc)
- {
- TQ3Point3D p;
- TQ3Vector3D pp;
- TQ3Point2D q;
-
- p = cameraData.placement.cameraLocation;
- AddValueCtl(vcc, "\pcameraLocation.x", p.x, -10.0, 10.0, 0.5); // [0]
- AddValueCtl(vcc, "\pcameraLocation.y", p.y, -10.0, 10.0, 0.5);
- AddValueCtl(vcc, "\pcameraLocation.z", p.z, 0.0, 30.0, 1.0);
- AddSeparator(vcc);
- p = cameraData.placement.pointOfInterest;
- AddValueCtl(vcc, "\ppointOfInterest.x", p.x, -10.0, 10.0, 1.0); // [4]
- AddValueCtl(vcc, "\ppointOfInterest.y", p.y, -10.0, 10.0, 1.0);
- AddValueCtl(vcc, "\ppointOfInterest.z", p.z, -10.0, 10.0, 1.0);
- AddSeparator(vcc);
- pp = cameraData.placement.upVector;
- AddValueCtl(vcc, "\pupVector.x", pp.x, -1.0, 1.0, 0.1); // [8]
- AddValueCtl(vcc, "\pupVector.y", pp.y, -1.0, 1.0, 0.1);
- AddValueCtl(vcc, "\pupVector.z", pp.z, -1.0, 1.0, 0.1);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\prange.hither", cameraData.range.hither, 0.0, 15.0, 1.0); // [12]
- AddValueCtl(vcc, "\prange.yon", cameraData.range.yon, 15.0, 100.0, 2.5);
- AddSeparator(vcc);
- q = cameraData.viewPort.origin;
- AddValueCtl(vcc, "\pviewPort.origin.x", q.x, -2.0, 2.0, 0.1); // [15]
- AddValueCtl(vcc, "\pviewPort.origin.y", q.y, -2.0, 2.0, 0.1);
- AddValueCtl(vcc, "\pviewPort.width", cameraData.viewPort.width, 1.0, 10.0, 0.5);
- AddValueCtl(vcc, "\pviewPort.height", cameraData.viewPort.height, 1.0, 10.0, 0.5);
- AddSeparator(vcc); // cBasicData = 20
- }
-
- //----------------------------------------------------------------------------------
- static void VCCtoBasicCameraData(VccPtr vcc, TQ3CameraData *cameraData)
- {
- (*cameraData).placement.cameraLocation.x = GetCurrentValue(vcc, 0);
- (*cameraData).placement.cameraLocation.y = GetCurrentValue(vcc, 1);
- (*cameraData).placement.cameraLocation.z = GetCurrentValue(vcc, 2);
-
- (*cameraData).placement.pointOfInterest.x = GetCurrentValue(vcc, 4);
- (*cameraData).placement.pointOfInterest.y = GetCurrentValue(vcc, 5);
- (*cameraData).placement.pointOfInterest.z = GetCurrentValue(vcc, 6);
-
- (*cameraData).placement.upVector.x = GetCurrentValue(vcc, 8);
- (*cameraData).placement.upVector.y = GetCurrentValue(vcc, 9);
- (*cameraData).placement.upVector.z = GetCurrentValue(vcc, 10);
-
- (*cameraData).range.hither = GetCurrentValue(vcc, 12);
- (*cameraData).range.yon = GetCurrentValue(vcc, 13);
-
- (*cameraData).viewPort.origin.x = GetCurrentValue(vcc, 15);
- (*cameraData).viewPort.origin.y = GetCurrentValue(vcc, 16);
- (*cameraData).viewPort.width = GetCurrentValue(vcc, 17);
- (*cameraData).viewPort.height = GetCurrentValue(vcc, 18);
- }
-